package main

import "fmt"

/*
if 条件表达式1 {
    逻辑代码1
} else if 条件表达式2 {
    逻辑代码2
}
.......
else {
                逻辑代码n
}
*/
func main() {
	//实现功能：根据给出的学生分数，判断学生的等级：
	// >=90  -----A
	// >=80  -----B
	// >=70  -----C
	// >=60  -----D
	// <60   -----E
	//方式1：利用if单分支实现：
	//定义一个学生的成绩：
	var score int = 18
	//对学生的成绩进行判定：
	// if score >= 90 {
	// 	fmt.Println("您的成绩为A级别")
	// }
	// if score >= 80 && score < 90 {
	// 	fmt.Println("您的成绩为B级别")
	// }
	// if score >= 70 && score < 80 {
	// 	fmt.Println("您的成绩为C级别")
	// }
	// if score >= 60 && score < 70 {
	// 	fmt.Println("您的成绩为D级别")
	// }
	// if score < 60 {
	// 	fmt.Println("您的成绩为E级别")
	// }
	//上面方式1利用多个单分支拼凑出多个选择，多个选择是并列的，依次从上而下顺序执行，即使走了第一个分支，那么其它分支也是需要判断

	//方式2：多分支：优点：如果已经走了一个分支了，那么下面的分支就不会再去判断执行了
	// if score >= 90 {
	// 	fmt.Println("您的成绩为A级别")
	// } else if score >= 80 {//else隐藏：score < 90
	// 	fmt.Println("您的成绩为B级别")
	// } else if score >= 70 {//score < 80
	// 	fmt.Println("您的成绩为C级别")
	// } else if score >= 60 {//score < 70
	// 	fmt.Println("您的成绩为D级别")
	// } else {//score < 60
	// 	fmt.Println("您的成绩为E级别")
	// } //建议你保证else的存在，只有有了else才会真正 起到多选一 的效果
	if score > 10 {
		fmt.Println("aaa")
		//后续分支不会再走,即便条件上满足了
	} else if score > 6 {
		fmt.Println("bbb")
	}

	fmt.Println()

	switchTest(score)

	fmt.Println()

	switchTest2()
}

/*
switch 表达式 {
			case 值1,值2,.….:
											语句块1
			case 值3,值4,...:
											语句块2
			....
			default:
			 语句块
}
*/
func switchTest(score int) {
	//实现功能：根据给出的学生分数，判断学生的等级：
	// >=90  -----A
	// >=80  -----B
	// >=70  -----C
	// >=60  -----D
	// <60   -----E
	//给出一个学生分数：
	score = 76
	//根据分数判断等级：
	//switch后面是一个表达式，这个表达式的结果依次跟case进行比较，满足结果的话就执行冒号后面的代码。
	//default是用来“兜底”的一个分支，其它case分支都不走的情况下就会走default分支
	//default分支可以放在任意位置上，不一定非要放在最后。
	switch score / 10 {
	//case后的各个值的数据类型，必须和 switch 的表达式数据类型一致
	case 10:
		//case后面不需要带break
		fmt.Println("您的等级为A级")
	case 9:
		fmt.Println("您的等级为A级")
	case 8:
		fmt.Println("您的等级为B级")
	case 7:
		fmt.Println("您的等级为C级")
		//switch穿透，利用fallthrough关键字，如果在case语句块后增加fallthrough ,则会继续执行下一个case,也叫switch穿透
		fallthrough
	case 6:
		fmt.Println("您的等级为D级")
	case 5:
		fmt.Println("您的等级为E级")
	case 4:
		fmt.Println("您的等级为E级")
	//case后面可以带多个值，使用逗号间隔。比如 case 值1,值2...
	case 3, 2, 1:
		fmt.Println("您的等级为E级")
	case 0:
		fmt.Println("您的等级为E级")
	default:
		//default语句不是必须的，位置也是随意的。
		fmt.Println("您的成绩有误")
	}
}

func switchTest2() {
	//不推荐
	//switch后也可以不带表达式，当做if分支来使用
	var a int32 = 2
	switch {
	case a == 1:
		fmt.Println("1...")
	case a == 2:
		fmt.Println("2...")
	}
}
